﻿namespace WinForms.Framework.Core
{
    /// <summary>
    /// ログの書き込みを行うインターフェースです。
    /// </summary>
    public interface ILogger
    {
        /// <summary>
        /// 文字列をデバッグログ情報に書き込みます。
        /// </summary>
        /// <param name="msg">ログに書き込む内容を設定します。</param>
        void Debug(object msg);

        /// <summary>
        /// 書式指定された文字列をデバッグログ情報に書き込みます。
        /// </summary>
        /// <param name="format">複合書式指定文字列を設定します。</param>
        /// <param name="args">0 個以上の書式設定対象オブジェクトを含んだオブジェクト配列を設定します。</param>
        void Debug(string format, params object[] args);

        /// <summary>
        /// 文字列をインフォメーションログ情報に書き込みます。
        /// </summary>
        /// <param name="msg">ログに書き込む内容を設定します。</param>
        void Info(object msg);

        /// <summary>
        /// 書式指定された文字列をインフォメーションログ情報に書き込みます。
        /// </summary>
        /// <param name="format">複合書式指定文字列を設定します。</param>
        /// <param name="args">0 個以上の書式設定対象オブジェクトを含んだオブジェクト配列を設定します。</param>
        void Info(string format, params object[] args);

        /// <summary>
        /// 文字列をエラーログ情報に書き込みます。
        /// </summary>
        /// <param name="msg">ログに書き込む内容を設定します。</param>
        /// <remarks>
        /// エラーログへの書き込みは、アプリケーションが終了しないエラーに対してのみ実装してください。
        /// </remarks>
        void Error(object msg);

        /// <summary>
        /// 書式指定された文字列をエラーログ情報に書き込みます。
        /// </summary>
        /// <param name="format">複合書式指定文字列を設定します。</param>
        /// <param name="args">0 個以上の書式設定対象オブジェクトを含んだオブジェクト配列を設定します。</param>
        void Error(string format, params object[] args);

        /// <summary>
        /// 文字列をフェイタルログ情報に書き込みます。
        /// </summary>
        /// <param name="msg">ログに書き込む内容を設定します。</param>
        /// <remarks>
        /// フェイタルログへの書き込みは、アプリケーションが終了するエラーに対してのみ実装してください。
        /// </remarks>
        void Fatal(object msg);

        /// <summary>
        /// 書式指定された文字列をフェイタルログ情報に書き込みます。
        /// </summary>
        /// <param name="format">複合書式指定文字列を設定します。</param>
        /// <param name="args">0 個以上の書式設定対象オブジェクトを含んだオブジェクト配列を設定します。</param>
        void Fatal(string format, params object[] args);
    }
}
